package com.wh1200.mybatis.xmlless.model.criteria

import com.wh1200.mybatis.xmlless.AnnotatedElementDetailInfo
import com.wh1200.mybatis.xmlless.model.ChooseCriteriaInfo
import com.wh1200.mybatis.xmlless.model.ClassInfo

/**
 * 参数信息
 *
 * @author 吴昊
 * @date 2023/12/06
 * @version 1.0
 * @since v4.0.0
 */
data class ParameterInfo(
    val parameter: AnnotatedElementDetailInfo,
    private val elementName: String,
    val type: ClassInfo,
    /** 参数上面使用@TestCriteria注解添加的条件 */
    val chooseCriteria: ChooseCriteriaInfo
) {

  /** 是否复杂对象参数 */
  val isComplex = type.isComplexType

  /** 集合或Page等对象的泛型类型 */
  val realType = type.realType

  /** 所有父类和接口 */
  val allSuperClassOrInterfaces = type.allSuperClassOrInterfaces

  /** 是否集合类型 */
  val isCollection = type.isCollection

  /** 是否数组类型 */
  val isArray = type.isArray

  /** Param注解 */
  val specificParamName: String? = parameter.specificName

  /** 参数名称 */
  val name = specificParamName ?: elementName

}
